home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Plus 2004 #6
/
Amiga Plus CD - 2004 - No. 06.iso
/
AmiSoft
/
Util
/
libs
/
ExtraLib.lha
/
Extra
/
include
/
rhosigma
/
settings.i
< prev
Wrap
Text File
|
2004-05-30
|
9KB
|
387 lines
; ___________________________________________________________________________
; |*************************************************************************|
; |*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|
; |*| Set TAB to 15 for best readable file layout. |*| HiSoft DevPac 3.04 |*|
; |*|______________________________________________|*|____________________|*|
; |*************************************************************************|
; |*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯|*|
; |*| |*| $Id: settings.i (18.04.03) |*|
; |*| ###### ###### |*| RhoSigma Source based on NDK 3.1 Includes 40.15 |*|
; |*| ## ## ## # |*| _________________________________________________ |*|
; |*| ## ## ## |*| |*|
; |*| ###### ## |*| Useful defines and extensions for NDK includes |*|
; |*| ## ## |*| |*|
; |*| ## ## # |*| ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ |*|
; |*| ## ###### |*| Copyright © 1998-2003 RhoSigma, Roland Heyder |*|
; |*| |*| All Rights Reserved. |*|
; |*|_______________|*|___________________________________________________|*|
; |*************************************************************************|
; ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
IFND RHOSIGMA_SETTINGS_I
RHOSIGMA_SETTINGS_I SET 1
IFND EXEC_MEMORY_I
INCLUDE exec/memory.i
ENDC
;** enhanced booleans **
UPPER EQU 1 ; Signum- und Wahrheitswerte zur
EQUAL EQU 0 ; Verwendung in Variablen des
LOWER EQU -1 ; Typs BOOL
FALSE = EQUAL
TRUE = UPPER
;** useful memory constants **
MOVE16_BLOCKSIZE EQU 16 ; zur Ausrichtung von Speicher
MOVE16_BLOCKMASK EQU (MOVE16_BLOCKSIZE-1) ; für MOVE16-Befehl (MC68040)
;** more types **
SINGLE MACRO ;(Label/A) ; Fließkomma-Typen
\1 = SOFFSET ; DOUBLE bereits in types.i
SOFFSET SET SOFFSET+4 ; definiert
ENDM
EXTEND MACRO ;(Label/A)
\1 = SOFFSET
SOFFSET SET SOFFSET+12
ENDM
PACKED MACRO ;(Label/A)
\1 = SOFFSET
SOFFSET SET SOFFSET+12
ENDM
CHARS MACRO ;(Label/A,Length/A/N) ; für String-Einbindungen
\1 = SOFFSET ; bzw. Puffer in Strukturen
SOFFSET SET SOFFSET+\2
ENDM
;** UNION-Types **
IFND USIZE ; wichtig um Assembler-Fehler
USIZE SET 0 ; zu verhindern
ENDC
; ACHTUNG !! - Jeweils beim letzten Element einer UNION muß das Schlüsselwort
; »END« angeben werden, damit der SOFFSET-Wert richtig erhöht wird.
UNIBOOL MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-2
USIZE SET 2
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNIBYTE MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-1
USIZE SET 1
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNIUBYTE MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-1
USIZE SET 1
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNIWORD MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-2
USIZE SET 2
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNIUWORD MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-2
USIZE SET 2
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNISHORT MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-2
USIZE SET 2
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNIUSHORT MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-2
USIZE SET 2
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNILONG MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-4
USIZE SET 4
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNIULONG MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-4
USIZE SET 4
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNIFLOAT MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-4
USIZE SET 4
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNISINGLE MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-4
USIZE SET 4
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNIDOUBLE MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-8
USIZE SET 8
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNIEXTEND MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-12
USIZE SET 12
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNIPACKED MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-12
USIZE SET 12
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNIAPTR MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-4
USIZE SET 4
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNICPTR MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-4
USIZE SET 4
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNIFPTR MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-4
USIZE SET 4
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNIRPTR MACRO ;(Label/A, END/K/S)
\1 = SOFFSET
IFLT USIZE-2
USIZE SET 2
ENDC
IFC '\2','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNISTRUCT MACRO ;(Label/A, Length/A/N, END/K/S)
\1 = SOFFSET
IFLT USIZE-(\2)
USIZE SET (\2)
ENDC
IFC '\3','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
UNICHARS MACRO ;(Label/A, Length/A/N, END/K/S)
\1 = SOFFSET
IFLT USIZE-(\2)
USIZE SET (\2)
ENDC
IFC '\3','END'
SOFFSET SET SOFFSET+USIZE
USIZE SET 0
ENDC
ENDM
;** offset alignments **
ALIGNFLOAT MACRO ;Offset für nächsten Fließkomma-Typen setzen
SOFFSET SET (SOFFSET+1)&$fffffffe
ENDM
ALIGNQUADWORD MACRO ;Offset auf nächstes QuadWord setzen (8 Bytes)
SOFFSET SET (SOFFSET+7)&$fffffff8
ENDM
ALIGNMEMBLOCK MACRO ;Offset auf nächstes Vielfaches von MEM_BLOCKSIZE
SOFFSET SET (SOFFSET+MEM_BLOCKMASK)&(~MEM_BLOCKMASK)
ENDM
ALIGNMOVE16 MACRO ;Offset auf nächstes Vielfaches für MOVE16 (MC68040)
SOFFSET SET (SOFFSET+MOVE16_BLOCKMASK)&(~MOVE16_BLOCKMASK)
ENDM
;** for DisplayAlert() **
DATPOS_C EQU -1 ; Text zentrieren
DATPOS_L EQU -2 ; Text linksbündig
DATPOS_R EQU -3 ; Text rechtsbündig
;*** rhosigma / DATEXT() ***
;============================================================================
; Dieses Macro erstellt einen Teilstring des Parameterstrings der Intuition-
; Funktion »DisplayAlert()«. Wahlweise kann der Text automatisch zentriert,
; oder links- bzw. rechsbündig ausgerichtet werden.
;----------------------------------------------------------------------------
; Definiert: settings.i (Copyright © 1998-2003 RhoSigma, Roland Heyder)
;
; Schablone: xPos/A/N, yPos/A/N, Text/A, END/K/S
;
; Parameter: xPos --> x-Position des Textes,
; oder einer der oben definierten DATPOS-Werte
;
; yPos --> y-Position des Textes,
; Ausrichtung nach BaseLine des Fonts (topaz/8)
;
; Text --> der auszugebende Text selbst,
; in <..>, wenn Leerzeichen enthalten sind
;
; END --> Wird dieses Schlüsselwort angegeben, dann endet der
; Parameterstring an dieser Stelle, anderenfalls muß
; ein weiterer Teilstring (Macro-Aufruf) folgen.
;
; Bemerkung: Ein Beispiel für die Benutzung dieses Macros finden Sie in der
; Datei »demo/AlertDemo.ASM«.
;============================================================================
DATEXT MACRO ;(xPos/A/N, yPos/A/N, Text/A, END/K/S)
;----------------------------------------------------
IFEQ \1+(-DATPOS_C)
dc.w DAz\@ ; X-Pos berechnet (zentriert)
ELSEIF
IFEQ \1+(-DATPOS_L)
dc.w 12 ; X-Pos (linksbündig)
ELSEIF
IFEQ \1+(-DATPOS_R)
dc.w DAr\@ ; X-Pos berechnet (rechtsbündig)
ELSEIF
dc.w \1 ; angegebene absolute X-Pos
ENDC
ENDC
ENDC
; Mit »dc.w« wird hier sichergestellt, daß der ParamString auf
; einer geraden Adresse beginnt (wichtig für OS 1.3 und früher).
; Eine ungerade Zeichenanzahl des Teilstrings sorgt außerdem da-
; für, daß wir mit allen Koordinaten u. anderen Bytes zusammen
; letztlich auch wieder auf einer geraden Adresse ankommen, für
; die X-Pos des nächsten Teilstrings. Sollte der Text eine ge-
; rade Anzahl Zeichen haben, wird einfach ein Leerz. angehängt.
dc.b \2 ; Y-Pos
DAs\@ dc.b "\3" ; Text ohne 0-Byte
DAe\@
DAl\@ = (DAe\@-DAs\@) ; Länge der Zeichenkette
DAz\@ = (640-(DAl\@*8))/2 ; X-Pos für Zentrierung
DAr\@ = (640-(DAl\@*8))-12 ; X-Pos für rechtsbündig
IFEQ (DAl\@&1) ; wenn gerade Zeichenanzahl
dc.b " " ; dann ein Leerz. anhängen
ENDC ; (wegen OS 1.3 u. früher)
IFNC '\4','END'
dc.b 0,1 ; Text-0-Byte u. Continue
ELSEIF
dc.b 0,0 ; Text-0-Byte u. ParamEnde
ENDC
;----------------------------------------------------
ENDM ;DATEXT
ENDC ;settings.i